﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;

public partial class Predmeti : System.Web.UI.Page
{
    /// <summary>
    ///     <para>
    ///         Vo Page_Load najprvo se proveruva dali korisnikot e od soodvetniot tip.
    ///         Ako sesiskata promenliva na koja i dodavame vrednost vo Login.aspx ne e ednakva na 1, korisnikot se redirekira na NO.aspx stranata. 
    ///         Ako vrati true togas vo Sesiska promenliva se zacuvuva momentalnata strana i vo soodvetni labeli se stavaat imeto, prezimeto i indeksot cii informacii se cuvaat vo sesiski promenlivi.
    ///     </para>
    ///     <para>
    ///         Se povikuva metodot za ispolnuvanje na kontrolite na stranata ispolniKontroli().
    ///     </para>
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
        if ((int)Session["tip"] != 1) Response.Redirect("NO.aspx");
        else Session["strana"] = Request.RawUrl.ToString();

        if (!IsPostBack)
        {
            //Vo labeli se smestuvaat imeto, prezimeto i indeksot od sesiskite promenlivi
            lblIme.Text = "Име: " + Session["ime"].ToString();
            lblPrezime.Text = "Презиме: " + Session["prezime"].ToString();
            lblIndeks.Text = "Индекс: " + Session["indeks"].ToString();
            IspolniKontroli();
            
        }
        
    }

    /// <summary>
    ///     <para>
    ///         Se ostvaruva konekcija i se zemaat informacii za predmetite koi gi slusa korisnikot, nivnite laboratoriski vezbi i profesori. 
    ///         Informaciite se stavaat vo gridview zaedno so promenliva od tip Label. 
    ///         Labelata se ispolnuva so informacija dali studentot ima uslov za potpis vo zavisnost od brojot na poseteni laboratoriski vezbi. 
    ///         Dokolku brojot na neposeteni laboratoriski vezbi e pogolem od 2 korisnikot nema uslov za potpis.
    ///         Se ispolnuvaat dve listi. Za ednata od baza se zemaat imeto i prezimeto na site profesori, a za drugata se zemaat site predmeti.
    ///     </para>
    /// </summary>
    protected void IspolniKontroli()
    {
        //Kreiranje na konekcija do bazata.
        SqlConnection konekcija = new SqlConnection();
        konekcija.ConnectionString = ConfigurationManager.ConnectionStrings["mojaKonekcija"].ConnectionString; 

        //Kreiranje na SQL query
        SqlCommand komanda = new SqlCommand();
        komanda.Connection = konekcija;
        komanda.CommandText = "SELECT  pr.Predmet, k.Ime, k.Prezime, s.eden, s.dva, s.tri, s.cetiri, s.pet, s.sest, s.sedum FROM  Slusa AS s, Korisnici as k, Predmet AS pr WHERE s.s_prof=k.KorIme AND pr.p_ID=s.s_predmet AND s.eden iS NOT NULL AND s.s_student='" + Session["korisnicko"].ToString() + "'";
        SqlDataAdapter adapter = new SqlDataAdapter(komanda);    
        DataSet ds = new DataSet();
        
        try
        {
            konekcija.Open();

            //Polnenje na gridview
            adapter.Fill(ds, "Predmeti");
            gvPredmeti.DataSource = ds;
            gvPredmeti.DataBind();
            for (int i = 0; i < gvPredmeti.Rows.Count; i++)
            {
                int br = 0;
                Label potpis = (Label)gvPredmeti.Rows[i].FindControl("Potpis");
             
                for (int j = 2; j < 9; j++)
                {
                    //Se proveruvaat posetenite labaratoriski
                    bool notlab = ((CheckBox)gvPredmeti.Rows[i].Cells[j].Controls[0]).Checked;

                    //Za sekoja neposetena labaratoriska se zgolemuva brojacot
                    if (notlab == false) br++;
                }
                //Ako brojacot e pogolem od 2 korisnikot nema uslov za dobivanje potpis po predmetot.
                if (br > 2) potpis.Text = "Немате услов за потпис";
                else potpis.Text = "Имате услов за потпис";
                
            }         

            //Mislam deka ne treba viewstateov :)
            //ViewState["dataset2"] = ds;

            //SQL query za zemanje na site profesori, nivnite iminja i preziminja
            komanda.CommandText = "SELECT k.Ime, k.Prezime, k.KorIme FROM Korisnici as k, profesori as p WHERE p.a_KorIme=k.KorIme";
            SqlDataReader citac = komanda.ExecuteReader();
            
            while (citac.Read())
            {
                //Se polni ListItem so site iminja na profesorite. Value zapisot se koristi za SQL queryto vo lbProf Index Changed handlerot.
                ListItem temp = new ListItem();
                temp.Text = citac["Ime"].ToString()+" "+citac["Prezime"].ToString();
                temp.Value = citac["KorIme"].ToString();
                //ListBox-ot se polni so iminja na profesori
                lbProf.Items.Add(temp);
            }
            citac.Close();
            
            //SQL za selektiranje na site predmeti
            komanda.CommandText = "SELECT Predmet FROM Predmet";
            citac = komanda.ExecuteReader();
            while (citac.Read())
            {
                //Polnenje za ListBox-ot lbPredmet so site predmeti
                ListItem temp = new ListItem();
                temp.Text = citac["Predmet"].ToString();
                lbPredmet.Items.Add(temp);
            }
            citac.Close();
        }
        catch (Exception er) { }
        finally
        {
            konekcija.Close();
        }
    }

    /// <summary>
    ///     <para>
    ///         Ovoj handler se povikuva pri promena na selekcija vo listata na predmeti. 
    ///         Povtorno se ostvaruva konekcija i od databazata se zemaat informacii za 
    ///         imeto, prezimeto, i korisnickoto ime za site profesori koi go predavaat selektiraniot predmet. 
    ///         Listata koja gi sodrzi iminjata na profesorite se polni samo so profesorite koi go predavaat selektiraniot predmet.
    ///     </para>
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbPredmet_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Se cistat listata so profesori i labelata za prikaz na termin za konsultacii
        lbProf.Items.Clear();
        lblKonsultacii.Text = "";

        //Kreiranje konekcija kon bazata
        SqlConnection konekcija = new SqlConnection();
        konekcija.ConnectionString = ConfigurationManager.ConnectionStrings["mojaKonekcija"].ConnectionString;

        //Kreiranje na SQL query
        SqlCommand komanda = new SqlCommand();
        komanda.Connection = konekcija;
        komanda.CommandText = "SELECT DISTINCT k.Ime, k.Prezime, k.KorIme FROM Korisnici as k, predava as pr, predmet as pp WHERE pp.p_ID=pr.predmet_ID AND pr.prof_ID=k.KorIme AND pp.Predmet='"+lbPredmet.SelectedItem.Text+"'";
        try
        {
            konekcija.Open();
            SqlDataReader citac = komanda.ExecuteReader();
            while (citac.Read())
            {
                ListItem element = new ListItem();
                element.Text = citac["Ime"].ToString() + " " + citac["Prezime"].ToString();
                element.Value = citac["KorIme"].ToString();
                lbProf.Items.Add(element);
            }
            citac.Close();
        }
        catch (Exception er) { }
        finally
        {
            //Zatvaranje na konekcija so bazata
            konekcija.Close();
        }       
    }

    /// <summary>
    ///     <para>
    ///         Ovoj handler se povikuva pri promena na selekcija vo listata koja gi sodrzi profesorite. 
    ///         Se zemaat informacii od baza za denot i vremeto na traenje na konsultaciite na selektiraniot profesor. 
    ///         Soodvetna labela se polni so tie informacii.
    ///     </para>
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbProf_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Kreiranje konekcija kon bazata
        SqlConnection konekcija = new SqlConnection();
        konekcija.ConnectionString = ConfigurationManager.ConnectionStrings["mojaKonekcija"].ConnectionString;
        
        //Kreiranje na SQL query
        SqlCommand komanda = new SqlCommand();
        komanda.Connection = konekcija;
        komanda.CommandText = "SELECT p.den, p.ood_k, p.doo_k FROM Profesori as p WHERE  p.a_KorIme='" + lbProf.SelectedValue.ToString() + "'";
        try
        {
            konekcija.Open();
            SqlDataReader citac = komanda.ExecuteReader();
            if(citac.Read())
            {
                lblKonsultacii.Text = citac["den"].ToString();
                int k = (int)citac["doo_k"] + 1;
                switch ((int)(citac["den"]))
                {
                    case 1: lblKonsultacii.Text = "Понеделник: " + (int)citac["ood_k"] + ":00h- " + k + ":00h"; break;
                    case 2: lblKonsultacii.Text = "Вторник: " + (int)citac["ood_k"] + ":00h- " + k + ":00h"; break;
                    case 3: lblKonsultacii.Text = "Среда: " + (int)citac["ood_k"] + ":00h- " + k + ":00h"; break;
                    case 4: lblKonsultacii.Text = "Четврток: " + (int)citac["ood_k"] + ":00h- " + k + ":00h"; break;
                    case 5: lblKonsultacii.Text = "Петок: " + (int)citac["ood_k"] + ":00h- " + k + ":00h"; break; 
                }
            }
            citac.Close();
        }
        catch (Exception er) { lblKonsultacii.Text = "error"; }
        finally
        {
            //Zatvaranje na konekcija so bazata
            konekcija.Close();
        }
    }
}